<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Yarrow algorithm</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Yarrow_algorithm"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Yarrow_algorithm rootpage-Yarrow_algorithm skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Yarrow algorithm</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style>
<p>The <b>Yarrow algorithm</b> is a family of <a href="Cryptographic_pseudorandom_number_generator" class="mw-redirect" title="Cryptographic pseudorandom number generator">cryptographic pseudorandom number generators</a> (CSPRNG) devised by <a href="John_Kelsey_(cryptanalyst)" title="John Kelsey (cryptanalyst)">John Kelsey</a>, <a href="Bruce_Schneier" title="Bruce Schneier">Bruce Schneier</a>, and <a href="Niels_Ferguson" title="Niels Ferguson">Niels Ferguson</a> and published in 1999. The Yarrow algorithm is explicitly unpatented, royalty-free, and open source; no license is required to use it. An improved design from Ferguson and Schneier, <a href="Fortuna_(PRNG)" title="Fortuna (PRNG)">Fortuna</a>, is described in their book, <i>Practical Cryptography</i>
</p><p>Yarrow was used in <a href="FreeBSD" title="FreeBSD">FreeBSD</a>, but is now superseded by Fortuna.<sup id="cite_ref-bsd_1-0" class="reference"><a href="#cite_note-bsd-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Yarrow was also incorporated in iOS<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> and <a href="MacOS" title="MacOS">macOS</a> for their <a href=".//dev/random" title="/dev/random">/dev/random</a> devices, but Apple has switched to Fortuna since 2020 Q1.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Name">Name</h2></div>
<p>The name <i>Yarrow</i> alludes to the use of the <a href="Achillea_millefolium" title="Achillea millefolium">yarrow plant</a> in the random generating process of <a href="I_Ching_divination" title="I Ching divination">I Ching divination</a>. Since the <a href="Xia_dynasty" title="Xia dynasty">Xia dynasty</a> (<abbr title="circa">c.</abbr><span style="white-space:nowrap;"> 2070</span> to <abbr title="circa">c.</abbr><span style="white-space:nowrap;"> 1600 BCE</span>), Chinese have used yarrow stalks for divination. Fortunetellers divide a set of 50 yarrow stalks into piles and use <a href="Modular_arithmetic" title="Modular arithmetic">modular arithmetic</a> recursively to generate two bits of random information<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
that have a non-<a href="Discrete_uniform_distribution" title="Discrete uniform distribution">uniform distribution</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Principles">Principles</h2></div>
<p>Yarrow's main design principles are: resistance to attacks, easy use by programmers with no cryptography background, and reusability of existing building blocks. The former widely used designs such as ANSI X9.17 and RSAREF 2.0 PRNG have loopholes that provide attack opportunities under some circumstances. Some of them are not designed with real-world attacks in mind. Yarrow also aims to provide easy integration, to enable system designers with little knowledge of PRNG functionality.<sup id="cite_ref-report1999_5-0" class="reference"><a href="#cite_note-report1999-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Design">Design</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Components">Components</h3></div>
<p>The design of Yarrow consists of four major components: an <a href="Entropy_(computing)" title="Entropy (computing)">entropy</a> accumulator, a <a href="Random_seed" title="Random seed">reseed</a> mechanism, a generation mechanism, and reseed control.
</p><p>Yarrow accumulates entropy into two pools: the fast pool, which provides frequent reseeds of the <a href="Unique_key" title="Unique key">key</a> to keep the duration of key compromises as short as possible; the slow pool, which provides rare but conservative reseeds of the key. This makes sure that the reseed is secured even when the entropy estimates are very optimistic.
</p><p>The reseed mechanism connects the entropy accumulator to the generating mechanism. Reseeding from the fast pool uses the current key and the <a href="Hash_value" class="mw-redirect" title="Hash value">hash</a> of all inputs to the fast pool since startup to generate a new key; reseeding from the slow pool behaves similarly, except it also uses the hash of all inputs to the slow pool to generate a new key. Both of the reseedings reset the entropy estimation of the fast pool to zero, but the last one also sets the estimation of the slow pool to zero. The reseeding mechanism updates the key constantly, so that even if the key of pool information is known to the attacker before the reseed, they will be unknown to the attacker after the reseed.
</p><p>The reseed control component is leveraging between frequent reseeding, which is desirable but might allow <a href="#Iterative_guessing_attack">iterative guessing attacks</a>, and infrequent reseeding, which compromises more information for an attacker who has the key. Yarrow uses the fast pool to reseed whenever the source passes some threshold values, and uses the slow pool to reseed whenever at least two of its sources pass some other threshold value. The specific threshold values are mentioned in the <a href="#Yarrow-160">Yarrow-160</a> section.
</p>
<div class="mw-heading mw-heading3"><h3 id="Design_philosophy">Design philosophy</h3></div>
<p>Yarrow assumes that enough entropy can be accumulated to ensure that the PRNG is in an unpredictable state. The designers accumulate entropy in the purpose of keeping the ability to recover the PRNG even when the key is compromised. Similar design philosophy is taken by RSAREF, DSA and ANSI X9.17 PRNGs.
</p>
<div class="mw-heading mw-heading3"><h3 id="Yarrow-160">Yarrow-160</h3></div>
<p>The Yarrow uses two important algorithms: a <a href="Cryptographic_hash_function" title="Cryptographic hash function">one-way hash function</a> and a <a href="Block_cipher" title="Block cipher">block cipher</a>. The specific description and properties are listed in the table below.
</p>
<table class="wikitable">
<tbody><tr>
<th>Algorithms</th>
<th>Properties</th>
<th>What Yarrow-160 uses
</th></tr>
<tr>
<td>Hash function h(x)</td>
<td>
<ul><li>One-way</li>
<li>m-bit output size</li>
<li>collision intractable</li></ul>
<p>Given <var style="padding-right: 1px;">M</var> input values, the |M| selections of output values are uniformly distributed over <i>m</i>-bit values.
</p>
</td>
<td><a href="SHA-1" title="SHA-1">SHA-1</a> hash function
</td></tr>
<tr>
<td>Block cipher E()</td>
<td>
<ul><li>Resistant to known-plaintext and chosen-plaintext attacks</li></ul>
<p>High statistical performance of outputs when given highly patterned inputs.
</p>
</td>
<td>Three-key <a href="Triple_DES" title="Triple DES">Triple DES</a>
</td></tr></tbody></table>
<div class="mw-heading mw-heading4"><h4 id="Generation">Generation</h4></div>
<p>Yarrow-160 uses three-key <a href="Triple_DES" title="Triple DES">Triple DES</a> in counter mode to generate outputs. <i><span class="texhtml">C</span></i> is an <i>n</i>-bit counter value; <i><span class="texhtml">K</span></i> is the key. In order to generate the next output block, Yarrow follows the functions shown here.
</p><p>Yarrow keeps count of the output block, because once the key is compromised, the leak of the old output before the compromised one can be stopped immediately. Once some system security parameter <i><span class="texhtml">P<sub>g</sub></span></i> is reached, the algorithm will generate <i><span class="texhtml">k</span></i> bits of PRNG output and use them as the new key. In Yarrow-160, the system <a href="Security_parameter" title="Security parameter">security parameter</a> is set to be <i>10</i>, which means <i><span class="texhtml">P<sub>g</sub> = 10</span></i>. The parameter is intentionally set to be low to minimize the number of outputs that can be backtracked.
</p>
<div class="mw-heading mw-heading4"><h4 id="Reseed">Reseed</h4></div>
<p>The reseed mechanism of Yarrow-160 uses SHA-1 and Triple DES as the hash function and block cipher. The details steps are in the original paper.
</p>
<div class="mw-heading mw-heading4"><h4 id="Implementation_of_Yarrow-160">Implementation of Yarrow-160</h4></div>
<p>Yarrow-160 has been implemented in <a href="Java_(programming_language)" title="Java (programming language)">Java</a>, and for <a href="FreeBSD" title="FreeBSD">FreeBSD</a>. The examples can be found in "An implementation of the Yarrow PRNG for FreeBSD"<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> by Mark R. V. Murray.
</p>
<div class="mw-heading mw-heading2"><h2 id="Pros_and_cons_of_Yarrow">Pros and cons of Yarrow</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Pros">Pros</h3></div>
<ul><li>Yarrow reuses existing building blocks.</li>
<li>Compared to previous PRNGs, Yarrow is reasonably efficient.</li>
<li>Yarrow can be used by programmers with no cryptography background in a reasonably secure way. Yarrow is portable and precisely defined. The interface is simple and clear. These features somewhat decrease the chances of implementation errors.</li>
<li>Yarrow was created using an attack-oriented design process.</li>
<li>The <a href="Entropy_estimation" title="Entropy estimation">entropy estimation</a> of Yarrow is very conservative, thus preventing <a href="Brute_force_attack" class="mw-redirect" title="Brute force attack">exhaustive search attacks</a>. It is very common that PRNGs fail in real-world applications due to entropy overestimation and guessable starting points.</li>
<li>The reseeding process of Yarrow is relatively computationally expensive, thus the cost of attempting to guess the PRNG's key is higher.</li>
<li>Yarrow uses functions to simplify the management of seed files, thus the files are constantly updated.</li>
<li>To handle <a href="Cryptanalysis" title="Cryptanalysis">cryptanalytic</a> attacks, Yarrow is designed to be based on a block cipher that is secured. The <a href="Level_of_security" class="mw-redirect" title="Level of security">level of security</a> of the generation mechanism depends on the block cipher.</li>
<li>Yarrow tries to avoid data-dependent execution paths. This is done to prevent <a href="Side-channel_attacks" class="mw-redirect" title="Side-channel attacks">side-channel attacks</a> such as <a href="Timing_attacks" class="mw-redirect" title="Timing attacks">timing attacks</a> and <a href="Power_analysis" title="Power analysis">power analysis</a>. This is an improvement compared to earlier PRNGs, for example RSAREF 2.0 PRNG, that will completely fall apart once additional information about the internal operations are no longer secured.</li>
<li>Yarrow uses cryptographic hash functions to process input samples, and then uses a secure update function to combine the samples with the existing key. This makes sure that the attacker cannot easily manipulate the input samples. PRNGs such as RSAREF 2.0 PRNG do not have the ability to resist this kind of chosen-input attack.</li>
<li>Unlike ANSI X9.17 PRNG, Yarrow has the ability to recover from a key compromise. This means that even when the key is compromised, the attacker will not be able to predict future outputs forever. This is due to the reseeding mechanism of Yarrow.<sup id="cite_ref-report1999_5-1" class="reference"><a href="#cite_note-report1999-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 5">: 5 </span></sup></li>
<li>Yarrow has the entropy samples pool separated from the key, and only reseeds the key when the entropy pool content is completely unpredictable. This design prevents iterative guessing attacks, where an attacker with the key guesses the next sample and checks the result by observing the next output.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Cons">Cons</h3></div>
<ul><li>Yarrow depends on SHA-1, a hash that has been broken (in terms of <a href="Collision_resistance" title="Collision resistance">collision resistance</a>) since Yarrow's publication and is no longer considered secure.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> However, there is no published attack that uses SHA-1 collisions to undermine Yarrow's randomness.</li>
<li>Since the outputs of Yarrow are cryptographically derived, the systems that use those outputs can only be as secure as the generation mechanism itself. That means the attacker who can break the generation mechanism will easily break a system that depends on Yarrow's outputs. This problem cannot be solved by increasing entropy accumulation.</li>
<li>Yarrow requires entropy estimation, which is a very big challenge for implementations.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> It is hard to be sure how much entropy to collect before using it to reseed the PRNG.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> This problem is solved by <a href="Fortuna_(PRNG)" title="Fortuna (PRNG)">Fortuna</a>, an improvement of Yarrow. Fortuna has 32 pools to collect entropy and removed the entropy estimator completely.</li>
<li>Yarrow's strength is limited by the size of the key. For example, Yarrow-160 has an effective <a href="Key_size" title="Key size">key size</a> of 160 bits. If the security requires 256 bits, Yarrow-160 is not capable of doing the job.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-bsd-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-bsd_1-0">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://svnweb.freebsd.org/base?view=revision&revision=284959">"[base] Revision 284959"</a>. <i>Svnweb.freebsd.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">18 October</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.apple.com/br/ipad/business/docs/iOS_Security_Oct12.pdf">"iOS Security"</a> <span class="cs1-format">(PDF)</span>. <i>Apple.com</i>. October 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-10-21</span></span>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://support.apple.com/en-hk/guide/security/seca0c73a75b/web">"Random number generation"</a>. <i>Apple Support</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-10-26</span></span>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text">
<cite id="CITEREFSchneier" class="citation web cs1"><a href="Bruce_Schneier" title="Bruce Schneier">Schneier, Bruce</a>. <a rel="nofollow" class="external text" href="https://www.schneier.com/cryptography/yarrow/qa.html">"Questions & Answers about Yarrow"</a>. <i>Schneier on Security</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2016-02-15</span></span>. <q>The fortuneteller would divide a set of 50 stalks into piles, then repeatedly use modular arithmetic to generate two random bits.</q></cite></span>
</li>
<li id="cite_note-report1999-5"><span class="mw-cite-backlink">^ <a href="#cite_ref-report1999_5-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-report1999_5-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFKelseySchneierFerguson1999" class="citation journal cs1">Kelsey, John; Schneier, Bruce; Ferguson, Niels (August 1999). <a rel="nofollow" class="external text" href="https://www.schneier.com/wp-content/uploads/2016/02/paper-yarrow.pdf">"Yarrow-160: Notes on the Design and Analysis of the Yarrow Cryptographic Pseudorandom Number Generator"</a> <span class="cs1-format">(PDF)</span>. <i>Sixth Annual Workshop on Selected Areas in Cryptography</i>. <b>1758</b>: <span class="nowrap">13–</span>33. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F3-540-46513-8_2">10.1007/3-540-46513-8_2</a>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.usenix.org/legacy/events/bsdcon02/full_papers/murray/murray_html/">"An implementation of the Yarrow PRNG for FreeBSD"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">18 October</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite id="CITEREFStevensBurszteinKarpmanAlbertini2017" class="citation web cs1">Stevens, Marc; Bursztein, Elie; Karpman, Pierre; Albertini, Ange; Markov, Yarik (2017-02-23). <a rel="nofollow" class="external text" href="https://shattered.io/">"SHAttered"</a>. <i>SHAttered</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2017-04-27</span></span>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.silabs.com/Support%20Documents/TechnicalDocs/AN0806.pdf">"Fortuna Cryptographically Secure PRNG : AN0806 - Application Note"</a> <span class="cs1-format">(PDF)</span>. <i>Silabs.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2016-10-21</span></span>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite id="CITEREFcitadel2004" class="citation web cs1">citadel (4 March 2004). <a rel="nofollow" class="external text" href="http://www.codeproject.com/Articles/6321/Fortuna-A-Cryptographically-Secure-Pseudo-Random-N">"Fortuna – A Cryptographically Secure Pseudo Random Number Generator – CodeProject"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">18 October</span> 2016</span>.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://www.schneier.com/yarrow.html">Yarrow algorithm page</a></li>
<li><a rel="nofollow" class="external text" href="https://freenet.googlecode.com/svn/trunk/freenet/src/freenet/crypt/Yarrow.java">"Yarrow implementation in Java"</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080614213825/http://freenet.googlecode.com/svn/trunk/freenet/src/freenet/crypt/Yarrow.java">Archived</a> 2008-06-14 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a></li>
<li><a rel="nofollow" class="external text" href="https://www.freebsd.org/cgi/man.cgi?query=random&sektion=4">"Yarrow implementation in FreeBSD"</a></li>
<li><a rel="nofollow" class="external text" href="https://www.usenix.org/legacy/events/bsdcon02/full_papers/murray/murray_html/#entropy:block">"An implementation of the Yarrow PRNG for FreeBSD"</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-08-03" href="https://en.wikipedia.org/wiki/?title=Yarrow_algorithm&oldid=1304012596">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>